home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / IF.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  5KB  |  164 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Global definitions for the INET interface module.
  7.  *
  8.  * Version:    @(#)if.h    1.0.2    04/18/93
  9.  *
  10.  * Authors:    Original taken from Berkeley UNIX 4.3, (c) UCB 1982-1988
  11.  *        Ross Biro, <bir7@leland.Stanford.Edu>
  12.  *        Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  13.  *
  14.  *        This program is free software; you can redistribute it and/or
  15.  *        modify it under the terms of the GNU General Public License
  16.  *        as published by the Free Software Foundation; either version
  17.  *        2 of the License, or (at your option) any later version.
  18.  */
  19. #ifndef _LINUX_IF_H
  20. #define _LINUX_IF_H
  21.  
  22. #include <linux/types.h>        /* for "__kernel_caddr_t" et al    */
  23. #include <linux/socket.h>        /* for "struct sockaddr" et al    */
  24.  
  25. /* Standard interface flags. */
  26. #define    IFF_UP        0x1        /* interface is up        */
  27. #define    IFF_BROADCAST    0x2        /* broadcast address valid    */
  28. #define    IFF_DEBUG    0x4        /* turn on debugging        */
  29. #define    IFF_LOOPBACK    0x8        /* is a loopback net        */
  30. #define    IFF_POINTOPOINT    0x10        /* interface is has p-p link    */
  31. #define    IFF_NOTRAILERS    0x20        /* avoid use of trailers    */
  32. #define    IFF_RUNNING    0x40        /* resources allocated        */
  33. #define    IFF_NOARP    0x80        /* no ARP protocol        */
  34. #define    IFF_PROMISC    0x100        /* receive all packets        */
  35. #define    IFF_ALLMULTI    0x200        /* receive all multicast packets*/
  36.  
  37. #define IFF_MASTER    0x400        /* master of a load balancer     */
  38. #define IFF_SLAVE    0x800        /* slave of a load balancer    */
  39.  
  40. #define IFF_MULTICAST    0x1000        /* Supports multicast        */
  41.  
  42. #define IFF_VOLATILE    (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ALLMULTI)
  43.  
  44. #define IFF_PORTSEL    0x2000          /* can set media type        */
  45. #define IFF_AUTOMEDIA    0x4000        /* auto media select active    */
  46. #define IFF_DYNAMIC    0x8000        /* dialup device with changing addresses*/
  47.  
  48. #ifdef __KERNEL__
  49. /*
  50.  * The ifaddr structure contains information about one address
  51.  * of an interface.  They are maintained by the different address
  52.  * families, are allocated and attached when an address is set,
  53.  * and are linked together so all addresses for an interface can
  54.  * be located.
  55.  */
  56.  
  57. struct ifaddr 
  58. {
  59.     struct sockaddr    ifa_addr;    /* address of interface        */
  60.     union {
  61.         struct sockaddr    ifu_broadaddr;
  62.         struct sockaddr    ifu_dstaddr;
  63.     } ifa_ifu;
  64.     struct iface        *ifa_ifp;    /* back-pointer to interface    */
  65.     struct ifaddr        *ifa_next;    /* next address for interface    */
  66. };
  67.  
  68. #define    ifa_broadaddr    ifa_ifu.ifu_broadaddr    /* broadcast address    */
  69. #define    ifa_dstaddr    ifa_ifu.ifu_dstaddr    /* other end of link    */
  70.  
  71. #endif /* __KERNEL__ */ 
  72.  
  73. /*
  74.  *    Device mapping structure. I'd just gone off and designed a 
  75.  *    beautiful scheme using only loadable modules with arguments
  76.  *    for driver options and along come the PCMCIA people 8)
  77.  *
  78.  *    Ah well. The get() side of this is good for WDSETUP, and it'll
  79.  *    be handy for debugging things. The set side is fine for now and
  80.  *    being very small might be worth keeping for clean configuration.
  81.  */
  82.  
  83. struct ifmap 
  84. {
  85.     unsigned long mem_start;
  86.     unsigned long mem_end;
  87.     unsigned short base_addr; 
  88.     unsigned char irq;
  89.     unsigned char dma;
  90.     unsigned char port;
  91.     /* 3 bytes spare */
  92. };
  93.  
  94. /*
  95.  * Interface request structure used for socket
  96.  * ioctl's.  All interface ioctl's must have parameter
  97.  * definitions which begin with ifr_name.  The
  98.  * remainder may be interface specific.
  99.  */
  100.  
  101. struct ifreq 
  102. {
  103. #define IFHWADDRLEN    6
  104. #define    IFNAMSIZ    16
  105.     union
  106.     {
  107.         char    ifrn_name[IFNAMSIZ];        /* if name, e.g. "en0" */
  108.     } ifr_ifrn;
  109.     
  110.     union {
  111.         struct    sockaddr ifru_addr;
  112.         struct    sockaddr ifru_dstaddr;
  113.         struct    sockaddr ifru_broadaddr;
  114.         struct    sockaddr ifru_netmask;
  115.         struct  sockaddr ifru_hwaddr;
  116.         short    ifru_flags;
  117.         int    ifru_ivalue;
  118.         int    ifru_mtu;
  119.         struct  ifmap ifru_map;
  120.         char    ifru_slave[IFNAMSIZ];    /* Just fits the size */
  121.         char    ifru_newname[IFNAMSIZ];
  122.         char *    ifru_data;
  123.     } ifr_ifru;
  124. };
  125.  
  126. #define ifr_name    ifr_ifrn.ifrn_name    /* interface name     */
  127. #define ifr_hwaddr    ifr_ifru.ifru_hwaddr    /* MAC address         */
  128. #define    ifr_addr    ifr_ifru.ifru_addr    /* address        */
  129. #define    ifr_dstaddr    ifr_ifru.ifru_dstaddr    /* other end of p-p lnk    */
  130. #define    ifr_broadaddr    ifr_ifru.ifru_broadaddr    /* broadcast address    */
  131. #define    ifr_netmask    ifr_ifru.ifru_netmask    /* interface net mask    */
  132. #define    ifr_flags    ifr_ifru.ifru_flags    /* flags        */
  133. #define    ifr_metric    ifr_ifru.ifru_ivalue    /* metric        */
  134. #define    ifr_mtu        ifr_ifru.ifru_mtu    /* mtu            */
  135. #define ifr_map        ifr_ifru.ifru_map    /* device map        */
  136. #define ifr_slave    ifr_ifru.ifru_slave    /* slave device        */
  137. #define    ifr_data    ifr_ifru.ifru_data    /* for use by interface    */
  138. #define ifr_ifindex    ifr_ifru.ifru_ivalue    /* interface index    */
  139. #define ifr_bandwidth    ifr_ifru.ifru_ivalue    /* link bandwidth    */
  140. #define ifr_qlen    ifr_ifru.ifru_ivalue    /* Queue length     */
  141. #define ifr_newname    ifr_ifru.ifru_newname    /* New name        */
  142.  
  143. /*
  144.  * Structure used in SIOCGIFCONF request.
  145.  * Used to retrieve interface configuration
  146.  * for machine (useful for programs which
  147.  * must know all networks accessible).
  148.  */
  149.  
  150. struct ifconf 
  151. {
  152.     int    ifc_len;            /* size of buffer    */
  153.     union 
  154.     {
  155.         char *            ifcu_buf;
  156.         struct    ifreq         *ifcu_req;
  157.     } ifc_ifcu;
  158. };
  159. #define    ifc_buf    ifc_ifcu.ifcu_buf        /* buffer address    */
  160. #define    ifc_req    ifc_ifcu.ifcu_req        /* array of structures    */
  161.  
  162.  
  163. #endif /* _LINUX_IF_H */
  164.